package cn.itsource.Controller.system;

import cn.itsource.Utils.JSONResult;
import cn.itsource.domain.BlogArticleType;
import cn.itsource.query.BaseQuery;
import cn.itsource.service.IBlogArticleTypeService;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 *    用户类的控制层
 *
 *    @RestController:   @ResponseBody和@Controller的联合注解
 *    在前后端分离的项目中，控制层不需要做页面跳转的动作
 *    所有的控制层方法都是被前端进行异步请求的
 */
@RestController
@RequestMapping("/blogArticleType")   // 暴露一级路径
public class BlogArticleTypeController {

    /**
     * 注入业务层
     */
    @Autowired
    private IBlogArticleTypeService blogArticleTypeService;

    /**
     * 查询所有的文章类型数据
     * @return
     */
    @RequestMapping("/list")
    public JSONResult getAll(){
        // 调用业务层获取所有的文章类型数据
        List<BlogArticleType> allArticleType = blogArticleTypeService.getAllArticleType();
        // 返回给前端
        return JSONResult.createSuccess(allArticleType);
    }


    /**
     *      1. 准备一个   /user/pagelist  这个路径对应的方法
     *      2. 接受前端的参数
     *      3. 后端做好分页
     */
    /**
     * 分页查询所有信息的方法
     * @return
     */
    @RequestMapping(value = "/pagelist",method = RequestMethod.POST)
    public JSONResult pagelist(@RequestBody BaseQuery query){
        try {
            // 调用业务层的分页方法
            PageInfo<BlogArticleType> pageInfo = blogArticleTypeService.getAllArticleTypeByPage(query);
            // 调用成功的方法
            return JSONResult.createSuccess(pageInfo);
        } catch (Exception e) {
            e.printStackTrace();
            // 调用失败的方法
            return JSONResult.createError(e.getMessage());
        }
    }

    /**
     * 新增或修改的联合方法
     */
    @RequestMapping(value = "/save",method = RequestMethod.POST)
    public JSONResult saveOrUpdate(@RequestBody BlogArticleType user){
        try {
            // 调用新增或修改的方法
            blogArticleTypeService.saveOrUpdate(user);
            return JSONResult.createSuccess(null);
        } catch (Exception e) {
            e.printStackTrace();
            return JSONResult.createError(e.getMessage());
        }
    }


    /**
     * 删除的方法
     * @return
     * restful  将参数作为请求的url的一部分
     */
    @RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
    public JSONResult deleteById(@PathVariable("id") Long id){
        try {
            // 调用删除的方法
            blogArticleTypeService.deleteArticleTypeById(id);
            return JSONResult.createSuccess(null);
        } catch (Exception e) {
            e.printStackTrace();
            return JSONResult.createError(e.getMessage());
        }

    }

    /**
     * 批量删除的方法
     */
    @RequestMapping(value = "/deleteBatch",method = RequestMethod.POST)
    public JSONResult deleteBatch(@RequestBody BaseQuery query){
        try {
            blogArticleTypeService.batchDelete(query);
            return JSONResult.createSuccess(null);
        } catch (Exception e) {
            e.printStackTrace();
            return JSONResult.createError(e.getMessage());
        }

    }

}
